using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._GeocodingTools
{
    /// <summary>
    /// <para>Create Locator</para>
    /// <para>Creates a locator that can find the location of an address or a place, convert a table of addresses or places to a collection of point features, or identify the address of a point location.</para>
    /// <para>创建一个定位器，该定位器可以查找地址或地点的位置，将地址或地点表转换为点要素的集合，或者标识点位置的地址。</para>
    /// </summary>    
    [DisplayName("Create Locator")]
    public class CreateLocator : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateLocator()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_country_code">
        /// <para>Country or Region</para>
        /// <para><xdoc>
        ///   <para>Specifies where country-specific geocoding logic will be applied to the reference data for the locator.</para>
        ///   <para>The default is the regional setting of the operating system. It can be specified by selecting <As defined in data> from the list and mapping a value from the data in the field mapping, or it can be applied to the entire dataset by selecting one from the list.</para>
        ///   <para>It provides a country template containing the expected field names that display in the Field Mapping parameter for the specified country of the locator to be created.</para>
        ///   <bulletList>
        ///     <bullet_item><As defined in data>—Three-character country code value defined in the reference data for each feature</bullet_item><para/>
        ///     <bullet_item>American Samoa—American Samoa</bullet_item><para/>
        ///     <bullet_item>Australia—Australia</bullet_item><para/>
        ///     <bullet_item>Austria—Austria</bullet_item><para/>
        ///     <bullet_item>Belgium—Belgium</bullet_item><para/>
        ///     <bullet_item>Canada—Canada</bullet_item><para/>
        ///     <bullet_item>Switzerland— Switzerland</bullet_item><para/>
        ///     <bullet_item>Germany—Germany</bullet_item><para/>
        ///     <bullet_item>Spain—Spain</bullet_item><para/>
        ///     <bullet_item>France—France</bullet_item><para/>
        ///     <bullet_item>Great Britain—Great Britain</bullet_item><para/>
        ///     <bullet_item>Guam—Guam</bullet_item><para/>
        ///     <bullet_item>Northern Mariana Islands—Northern Mariana Islands</bullet_item><para/>
        ///     <bullet_item>Netherlands— Netherlands</bullet_item><para/>
        ///     <bullet_item>Puerto Rico—Puerto Rico</bullet_item><para/>
        ///     <bullet_item>U.S. Virgin Islands—U.S. Virgin Islands</bullet_item><para/>
        ///     <bullet_item>United States—United States</bullet_item><para/>
        ///     <bullet_item>Minor Outlying Islands of the United States— Minor Outlying Islands of the United States</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将特定于国家/地区的地理编码逻辑应用于定位器参考数据的位置。</para>
        /// <para>默认值为操作系统的区域设置。可以通过从列表中选择<数据中定义>并从字段映射中的数据映射值来指定它，也可以通过从列表中选择一个值来将其应用于整个数据集。</para>
        ///   <para>它提供了一个国家/地区模板，其中包含预期字段名称，这些字段名称显示在要创建的定位器的指定国家/地区的字段映射参数中。</para>
        ///   <bulletList>
        /// <bullet_item><数据中定义> - 在参考数据中为每个要素定义的三个字符的国家/地区代码值</bullet_item><para/>
        ///     <bullet_item>美属萨摩亚—美属萨摩亚</bullet_item><para/>
        ///     <bullet_item>澳大利亚—澳大利亚</bullet_item><para/>
        ///     <bullet_item>奥地利—奥地利</bullet_item><para/>
        ///     <bullet_item>比利时—比利时</bullet_item><para/>
        ///     <bullet_item>加拿大—加拿大</bullet_item><para/>
        ///     <bullet_item>瑞士— 瑞士</bullet_item><para/>
        ///     <bullet_item>德国—德国</bullet_item><para/>
        ///     <bullet_item>西班牙—西班牙</bullet_item><para/>
        ///     <bullet_item>法国—法国</bullet_item><para/>
        ///     <bullet_item>大不列颠—大不列颠</bullet_item><para/>
        ///     <bullet_item>关岛—关岛</bullet_item><para/>
        ///     <bullet_item>北马里亚纳群岛—北马里亚纳群岛</bullet_item><para/>
        ///     <bullet_item>荷兰— 荷兰</bullet_item><para/>
        ///     <bullet_item>波多黎各—波多黎各</bullet_item><para/>
        ///     <bullet_item>美属维尔京群岛—美属维尔京群岛</bullet_item><para/>
        ///     <bullet_item>美国 - 美国</bullet_item><para/>
        ///     <bullet_item>美国本土外小岛屿— 美国本土外小岛屿</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_primary_reference_data">
        /// <para>Primary Table(s)</para>
        /// <para><xdoc>
        ///   <para>The reference data feature classes and their roles that will be used to create the locator. Only one primary table can be used per role.</para>
        ///   <para>Feature classes represented as services are supported data types for use as primary reference data.</para>
        ///   <para>When a definition query is defined for the primary reference data or there are selected features, only the queried and selected features will be included when the locator is created.</para>
        ///   <para>When creating a locator with reference data that contains millions of features, you must have at least three to four times the size of the data in free disk space on the drive containing your temp directory, as files used to build the locator are written to this location before the locator is copied to the output location. If you do not have enough disk space, the tool will fail when it runs out of space. Also, when creating large locators, your machine must have enough RAM to handle large memory-intensive processes.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将用于创建定位器的参考数据要素类及其角色。每个角色只能使用一个主表。</para>
        ///   <para>表示为服务的要素类是受支持用作主参考数据的数据类型。</para>
        ///   <para>如果为主参考数据定义了定义查询或存在所选要素，则在创建定位器时将仅包括查询要素和所选要素。</para>
        ///   <para>使用包含数百万个要素的参考数据创建定位器时，包含临时目录的驱动器上的可用磁盘空间中的数据大小必须至少是其大小的三到四倍，因为在将定位器复制到输出位置之前，用于构建定位器的文件将写入此位置。如果磁盘空间不足，则该工具将在空间不足时失败。此外，在创建大型定位器时，计算机必须具有足够的 RAM 来处理大型内存密集型进程。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_field_mapping">
        /// <para>Field Mapping</para>
        /// <para><xdoc>
        ///   <para>The mapping of primary reference dataset fields to the fields supported by the locator role. Fields with an asterisk (*) next to their names are required by the locator role. Map the relevant fields for each table from the Primary Table(s) parameter.</para>
        ///   <para>If you are using an alternate name table, map Join ID in Primary Table(s).</para>
        ///   <para>To add custom output fields, type the name of the fields in the Custom Output Fields parameter. The new fields will be added to the Field Mapping parameter. You can then select the fields from the Primary Table(s) parameter that contain the additional values to be included in the geocode output.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将主要参考数据集字段映射到定位器角色支持的字段。名称旁边带有星号 （*） 的字段是定位器角色所必需的字段。映射主表参数中每个表的相关字段。</para>
        ///   <para>如果使用的是备用名称表，请在主表中映射联接 ID。</para>
        ///   <para>要添加自定义输出字段，请在自定义输出字段参数中键入字段的名称。新字段将添加到字段映射参数中。然后，您可以从主表参数中选择包含要包含在地理编码输出中的其他值的字段。</para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_out_locator">
        /// <para>Output Locator</para>
        /// <para>The output address locator file.</para>
        /// <para>输出地址定位器文件。</para>
        /// </param>
        /// <param name="_language_code">
        /// <para>Language Code</para>
        /// <para><xdoc>
        ///   <para>Specifies where language-specific geocoding logic will be applied to the reference data for the locator.</para>
        ///   <para>If a language code field exists in the primary reference data, providing a language code can improve the results of the geocoding.</para>
        ///   <para>It can be specified by selecting <As defined in data> from the list and mapping a value from the primary reference data in the field mapping, or it can be applied to the entire dataset by selecting a language from the list.</para>
        ///   <bulletList>
        ///     <bullet_item><As defined in data>—Three-character language code value defined in the reference data for each feature</bullet_item><para/>
        ///     <bullet_item>Basque—Basque</bullet_item><para/>
        ///     <bullet_item>Catalan—Catalan</bullet_item><para/>
        ///     <bullet_item>Dutch— Dutch</bullet_item><para/>
        ///     <bullet_item>English—English</bullet_item><para/>
        ///     <bullet_item>French—French</bullet_item><para/>
        ///     <bullet_item>German—German</bullet_item><para/>
        ///     <bullet_item>Galician—Galician</bullet_item><para/>
        ///     <bullet_item>Italian— Italian</bullet_item><para/>
        ///     <bullet_item>Spanish—Spanish</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将特定于语言的地理编码逻辑应用于定位器参考数据的位置。</para>
        ///   <para>如果主参考数据中存在语言代码字段，则提供语言代码可以改善地理编码的结果。</para>
        /// <para>可以通过从列表中选择<数据中定义>并映射字段映射中的主要参考数据中的值来指定它，也可以通过从列表中选择一种语言来将其应用于整个数据集。</para>
        ///   <bulletList>
        /// <bullet_item><数据中定义> - 在参考数据中为每个要素定义的三字符语言代码值</bullet_item><para/>
        ///     <bullet_item>巴斯克语—巴斯克语</bullet_item><para/>
        ///     <bullet_item>加泰罗尼亚语—加泰罗尼亚语</bullet_item><para/>
        ///     <bullet_item>荷兰语— 荷兰语</bullet_item><para/>
        ///     <bullet_item>英语—英语</bullet_item><para/>
        ///     <bullet_item>法语—法语</bullet_item><para/>
        ///     <bullet_item>德语—德语</bullet_item><para/>
        ///     <bullet_item>加利西亚语——加利西亚语</bullet_item><para/>
        ///     <bullet_item>意大利语— 意大利语</bullet_item><para/>
        ///     <bullet_item>西班牙语—西班牙语</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public CreateLocator(_country_code_value _country_code, object _primary_reference_data, List<object> _field_mapping, object _out_locator, _language_code_value? _language_code)
        {
            this._country_code = _country_code;
            this._primary_reference_data = _primary_reference_data;
            this._field_mapping = _field_mapping;
            this._out_locator = _out_locator;
            this._language_code = _language_code;
        }
        public override string ToolboxName => "Geocoding Tools";

        public override string ToolName => "Create Locator";

        public override string CallName => "geocoding.CreateLocator";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_country_code.GetGPValue(), _primary_reference_data, _field_mapping, _out_locator, _language_code.GetGPValue(), _alternatename_tables, _alternate_field_mapping, _custom_output_fields, _precision_type.GetGPValue()];

        /// <summary>
        /// <para>Country or Region</para>
        /// <para><xdoc>
        ///   <para>Specifies where country-specific geocoding logic will be applied to the reference data for the locator.</para>
        ///   <para>The default is the regional setting of the operating system. It can be specified by selecting <As defined in data> from the list and mapping a value from the data in the field mapping, or it can be applied to the entire dataset by selecting one from the list.</para>
        ///   <para>It provides a country template containing the expected field names that display in the Field Mapping parameter for the specified country of the locator to be created.</para>
        ///   <bulletList>
        ///     <bullet_item><As defined in data>—Three-character country code value defined in the reference data for each feature</bullet_item><para/>
        ///     <bullet_item>American Samoa—American Samoa</bullet_item><para/>
        ///     <bullet_item>Australia—Australia</bullet_item><para/>
        ///     <bullet_item>Austria—Austria</bullet_item><para/>
        ///     <bullet_item>Belgium—Belgium</bullet_item><para/>
        ///     <bullet_item>Canada—Canada</bullet_item><para/>
        ///     <bullet_item>Switzerland— Switzerland</bullet_item><para/>
        ///     <bullet_item>Germany—Germany</bullet_item><para/>
        ///     <bullet_item>Spain—Spain</bullet_item><para/>
        ///     <bullet_item>France—France</bullet_item><para/>
        ///     <bullet_item>Great Britain—Great Britain</bullet_item><para/>
        ///     <bullet_item>Guam—Guam</bullet_item><para/>
        ///     <bullet_item>Northern Mariana Islands—Northern Mariana Islands</bullet_item><para/>
        ///     <bullet_item>Netherlands— Netherlands</bullet_item><para/>
        ///     <bullet_item>Puerto Rico—Puerto Rico</bullet_item><para/>
        ///     <bullet_item>U.S. Virgin Islands—U.S. Virgin Islands</bullet_item><para/>
        ///     <bullet_item>United States—United States</bullet_item><para/>
        ///     <bullet_item>Minor Outlying Islands of the United States— Minor Outlying Islands of the United States</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将特定于国家/地区的地理编码逻辑应用于定位器参考数据的位置。</para>
        /// <para>默认值为操作系统的区域设置。可以通过从列表中选择<数据中定义>并从字段映射中的数据映射值来指定它，也可以通过从列表中选择一个值来将其应用于整个数据集。</para>
        ///   <para>它提供了一个国家/地区模板，其中包含预期字段名称，这些字段名称显示在要创建的定位器的指定国家/地区的字段映射参数中。</para>
        ///   <bulletList>
        /// <bullet_item><数据中定义> - 在参考数据中为每个要素定义的三个字符的国家/地区代码值</bullet_item><para/>
        ///     <bullet_item>美属萨摩亚—美属萨摩亚</bullet_item><para/>
        ///     <bullet_item>澳大利亚—澳大利亚</bullet_item><para/>
        ///     <bullet_item>奥地利—奥地利</bullet_item><para/>
        ///     <bullet_item>比利时—比利时</bullet_item><para/>
        ///     <bullet_item>加拿大—加拿大</bullet_item><para/>
        ///     <bullet_item>瑞士— 瑞士</bullet_item><para/>
        ///     <bullet_item>德国—德国</bullet_item><para/>
        ///     <bullet_item>西班牙—西班牙</bullet_item><para/>
        ///     <bullet_item>法国—法国</bullet_item><para/>
        ///     <bullet_item>大不列颠—大不列颠</bullet_item><para/>
        ///     <bullet_item>关岛—关岛</bullet_item><para/>
        ///     <bullet_item>北马里亚纳群岛—北马里亚纳群岛</bullet_item><para/>
        ///     <bullet_item>荷兰— 荷兰</bullet_item><para/>
        ///     <bullet_item>波多黎各—波多黎各</bullet_item><para/>
        ///     <bullet_item>美属维尔京群岛—美属维尔京群岛</bullet_item><para/>
        ///     <bullet_item>美国 - 美国</bullet_item><para/>
        ///     <bullet_item>美国本土外小岛屿— 美国本土外小岛屿</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Country or Region")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _country_code_value _country_code { get; set; }

        public enum _country_code_value
        {
            /// <summary>
            /// <para><As defined in data></para>
            /// <para><As defined in data>—Three-character country code value defined in the reference data for each feature</para>
            /// <para><数据中定义> - 在参考数据中为每个要素定义的三个字符的国家/地区代码值</para>
            /// </summary>
            [Description("<As defined in data>")]
            [GPEnumValue("AS_DEFINED_IN_DATA")]
            _AS_DEFINED_IN_DATA,

            /// <summary>
            /// <para>American Samoa</para>
            /// <para>American Samoa—American Samoa</para>
            /// <para>美属萨摩亚—美属萨摩亚</para>
            /// </summary>
            [Description("American Samoa")]
            [GPEnumValue("ASM")]
            _ASM,

            /// <summary>
            /// <para>Austria</para>
            /// <para>Austria—Austria</para>
            /// <para>奥地利—奥地利</para>
            /// </summary>
            [Description("Austria")]
            [GPEnumValue("AUT")]
            _AUT,

            /// <summary>
            /// <para>Australia</para>
            /// <para>Australia—Australia</para>
            /// <para>澳大利亚—澳大利亚</para>
            /// </summary>
            [Description("Australia")]
            [GPEnumValue("AUS")]
            _AUS,

            /// <summary>
            /// <para>Belgium</para>
            /// <para>Belgium—Belgium</para>
            /// <para>比利时—比利时</para>
            /// </summary>
            [Description("Belgium")]
            [GPEnumValue("BEL")]
            _BEL,

            /// <summary>
            /// <para>Canada</para>
            /// <para>Canada—Canada</para>
            /// <para>加拿大—加拿大</para>
            /// </summary>
            [Description("Canada")]
            [GPEnumValue("CAN")]
            _CAN,

            /// <summary>
            /// <para>Switzerland</para>
            /// <para>Switzerland— Switzerland</para>
            /// <para>瑞士— 瑞士</para>
            /// </summary>
            [Description("Switzerland")]
            [GPEnumValue("CHE")]
            _CHE,

            /// <summary>
            /// <para>Germany</para>
            /// <para>Germany—Germany</para>
            /// <para>德国—德国</para>
            /// </summary>
            [Description("Germany")]
            [GPEnumValue("DEU")]
            _DEU,

            /// <summary>
            /// <para>Spain</para>
            /// <para>Spain—Spain</para>
            /// <para>西班牙—西班牙</para>
            /// </summary>
            [Description("Spain")]
            [GPEnumValue("ESP")]
            _ESP,

            /// <summary>
            /// <para>France</para>
            /// <para>France—France</para>
            /// <para>法国—法国</para>
            /// </summary>
            [Description("France")]
            [GPEnumValue("FRA")]
            _FRA,

            /// <summary>
            /// <para>Great Britain</para>
            /// <para>Great Britain—Great Britain</para>
            /// <para>大不列颠—大不列颠</para>
            /// </summary>
            [Description("Great Britain")]
            [GPEnumValue("GBR")]
            _GBR,

            /// <summary>
            /// <para>Guam</para>
            /// <para>Guam—Guam</para>
            /// <para>关岛—关岛</para>
            /// </summary>
            [Description("Guam")]
            [GPEnumValue("GUM")]
            _GUM,

            /// <summary>
            /// <para>Northern Mariana Islands</para>
            /// <para>Northern Mariana Islands—Northern Mariana Islands</para>
            /// <para>北马里亚纳群岛—北马里亚纳群岛</para>
            /// </summary>
            [Description("Northern Mariana Islands")]
            [GPEnumValue("MNP")]
            _MNP,

            /// <summary>
            /// <para>Netherlands</para>
            /// <para>Netherlands— Netherlands</para>
            /// <para>荷兰— 荷兰</para>
            /// </summary>
            [Description("Netherlands")]
            [GPEnumValue("NLD")]
            _NLD,

            /// <summary>
            /// <para>Puerto Rico</para>
            /// <para>Puerto Rico—Puerto Rico</para>
            /// <para>波多黎各—波多黎各</para>
            /// </summary>
            [Description("Puerto Rico")]
            [GPEnumValue("PRI")]
            _PRI,

            /// <summary>
            /// <para>Minor Outlying Islands of the United States</para>
            /// <para>Minor Outlying Islands of the United States— Minor Outlying Islands of the United States</para>
            /// <para>美国本土外小岛屿— 美国本土外小岛屿</para>
            /// </summary>
            [Description("Minor Outlying Islands of the United States")]
            [GPEnumValue("UMI")]
            _UMI,

            /// <summary>
            /// <para>United States</para>
            /// <para>United States—United States</para>
            /// <para>美国 - 美国</para>
            /// </summary>
            [Description("United States")]
            [GPEnumValue("USA")]
            _USA,

            /// <summary>
            /// <para>U.S. Virgin Islands</para>
            /// <para>U.S. Virgin Islands—U.S. Virgin Islands</para>
            /// <para>美属维尔京群岛—美属维尔京群岛</para>
            /// </summary>
            [Description("U.S. Virgin Islands")]
            [GPEnumValue("VIR")]
            _VIR,

        }

        /// <summary>
        /// <para>Primary Table(s)</para>
        /// <para><xdoc>
        ///   <para>The reference data feature classes and their roles that will be used to create the locator. Only one primary table can be used per role.</para>
        ///   <para>Feature classes represented as services are supported data types for use as primary reference data.</para>
        ///   <para>When a definition query is defined for the primary reference data or there are selected features, only the queried and selected features will be included when the locator is created.</para>
        ///   <para>When creating a locator with reference data that contains millions of features, you must have at least three to four times the size of the data in free disk space on the drive containing your temp directory, as files used to build the locator are written to this location before the locator is copied to the output location. If you do not have enough disk space, the tool will fail when it runs out of space. Also, when creating large locators, your machine must have enough RAM to handle large memory-intensive processes.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将用于创建定位器的参考数据要素类及其角色。每个角色只能使用一个主表。</para>
        ///   <para>表示为服务的要素类是受支持用作主参考数据的数据类型。</para>
        ///   <para>如果为主参考数据定义了定义查询或存在所选要素，则在创建定位器时将仅包括查询要素和所选要素。</para>
        ///   <para>使用包含数百万个要素的参考数据创建定位器时，包含临时目录的驱动器上的可用磁盘空间中的数据大小必须至少是其大小的三到四倍，因为在将定位器复制到输出位置之前，用于构建定位器的文件将写入此位置。如果磁盘空间不足，则该工具将在空间不足时失败。此外，在创建大型定位器时，计算机必须具有足够的 RAM 来处理大型内存密集型进程。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Primary Table(s)")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _primary_reference_data { get; set; }


        /// <summary>
        /// <para>Field Mapping</para>
        /// <para><xdoc>
        ///   <para>The mapping of primary reference dataset fields to the fields supported by the locator role. Fields with an asterisk (*) next to their names are required by the locator role. Map the relevant fields for each table from the Primary Table(s) parameter.</para>
        ///   <para>If you are using an alternate name table, map Join ID in Primary Table(s).</para>
        ///   <para>To add custom output fields, type the name of the fields in the Custom Output Fields parameter. The new fields will be added to the Field Mapping parameter. You can then select the fields from the Primary Table(s) parameter that contain the additional values to be included in the geocode output.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将主要参考数据集字段映射到定位器角色支持的字段。名称旁边带有星号 （*） 的字段是定位器角色所必需的字段。映射主表参数中每个表的相关字段。</para>
        ///   <para>如果使用的是备用名称表，请在主表中映射联接 ID。</para>
        ///   <para>要添加自定义输出字段，请在自定义输出字段参数中键入字段的名称。新字段将添加到字段映射参数中。然后，您可以从主表参数中选择包含要包含在地理编码输出中的其他值的字段。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Field Mapping")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _field_mapping { get; set; }


        /// <summary>
        /// <para>Output Locator</para>
        /// <para>The output address locator file.</para>
        /// <para>输出地址定位器文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Locator")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_locator { get; set; }


        /// <summary>
        /// <para>Language Code</para>
        /// <para><xdoc>
        ///   <para>Specifies where language-specific geocoding logic will be applied to the reference data for the locator.</para>
        ///   <para>If a language code field exists in the primary reference data, providing a language code can improve the results of the geocoding.</para>
        ///   <para>It can be specified by selecting <As defined in data> from the list and mapping a value from the primary reference data in the field mapping, or it can be applied to the entire dataset by selecting a language from the list.</para>
        ///   <bulletList>
        ///     <bullet_item><As defined in data>—Three-character language code value defined in the reference data for each feature</bullet_item><para/>
        ///     <bullet_item>Basque—Basque</bullet_item><para/>
        ///     <bullet_item>Catalan—Catalan</bullet_item><para/>
        ///     <bullet_item>Dutch— Dutch</bullet_item><para/>
        ///     <bullet_item>English—English</bullet_item><para/>
        ///     <bullet_item>French—French</bullet_item><para/>
        ///     <bullet_item>German—German</bullet_item><para/>
        ///     <bullet_item>Galician—Galician</bullet_item><para/>
        ///     <bullet_item>Italian— Italian</bullet_item><para/>
        ///     <bullet_item>Spanish—Spanish</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将特定于语言的地理编码逻辑应用于定位器参考数据的位置。</para>
        ///   <para>如果主参考数据中存在语言代码字段，则提供语言代码可以改善地理编码的结果。</para>
        /// <para>可以通过从列表中选择<数据中定义>并映射字段映射中的主要参考数据中的值来指定它，也可以通过从列表中选择一种语言来将其应用于整个数据集。</para>
        ///   <bulletList>
        /// <bullet_item><数据中定义> - 在参考数据中为每个要素定义的三字符语言代码值</bullet_item><para/>
        ///     <bullet_item>巴斯克语—巴斯克语</bullet_item><para/>
        ///     <bullet_item>加泰罗尼亚语—加泰罗尼亚语</bullet_item><para/>
        ///     <bullet_item>荷兰语— 荷兰语</bullet_item><para/>
        ///     <bullet_item>英语—英语</bullet_item><para/>
        ///     <bullet_item>法语—法语</bullet_item><para/>
        ///     <bullet_item>德语—德语</bullet_item><para/>
        ///     <bullet_item>加利西亚语——加利西亚语</bullet_item><para/>
        ///     <bullet_item>意大利语— 意大利语</bullet_item><para/>
        ///     <bullet_item>西班牙语—西班牙语</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Language Code")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _language_code_value? _language_code { get; set; }

        public enum _language_code_value
        {
            /// <summary>
            /// <para><As defined in data></para>
            /// <para><As defined in data>—Three-character language code value defined in the reference data for each feature</para>
            /// <para><数据中定义> - 在参考数据中为每个要素定义的三字符语言代码值</para>
            /// </summary>
            [Description("<As defined in data>")]
            [GPEnumValue("AS_DEFINED_IN_DATA")]
            _AS_DEFINED_IN_DATA,

            /// <summary>
            /// <para>Basque</para>
            /// <para>Basque—Basque</para>
            /// <para>巴斯克语—巴斯克语</para>
            /// </summary>
            [Description("Basque")]
            [GPEnumValue("BAQ")]
            _BAQ,

            /// <summary>
            /// <para>Catalan</para>
            /// <para>Catalan—Catalan</para>
            /// <para>加泰罗尼亚语—加泰罗尼亚语</para>
            /// </summary>
            [Description("Catalan")]
            [GPEnumValue("CAT")]
            _CAT,

            /// <summary>
            /// <para>Dutch</para>
            /// <para>Dutch— Dutch</para>
            /// <para>荷兰语— 荷兰语</para>
            /// </summary>
            [Description("Dutch")]
            [GPEnumValue("DUT")]
            _DUT,

            /// <summary>
            /// <para>English</para>
            /// <para>English—English</para>
            /// <para>英语—英语</para>
            /// </summary>
            [Description("English")]
            [GPEnumValue("ENG")]
            _ENG,

            /// <summary>
            /// <para>French</para>
            /// <para>French—French</para>
            /// <para>法语—法语</para>
            /// </summary>
            [Description("French")]
            [GPEnumValue("FRE")]
            _FRE,

            /// <summary>
            /// <para>German</para>
            /// <para>German—German</para>
            /// <para>德语—德语</para>
            /// </summary>
            [Description("German")]
            [GPEnumValue("GER")]
            _GER,

            /// <summary>
            /// <para>Galician</para>
            /// <para>Galician—Galician</para>
            /// <para>加利西亚语——加利西亚语</para>
            /// </summary>
            [Description("Galician")]
            [GPEnumValue("GLG")]
            _GLG,

            /// <summary>
            /// <para>Italian</para>
            /// <para>Italian— Italian</para>
            /// <para>意大利语— 意大利语</para>
            /// </summary>
            [Description("Italian")]
            [GPEnumValue("ITA")]
            _ITA,

            /// <summary>
            /// <para>Spanish</para>
            /// <para>Spanish—Spanish</para>
            /// <para>西班牙语—西班牙语</para>
            /// </summary>
            [Description("Spanish")]
            [GPEnumValue("SPA")]
            _SPA,

        }

        /// <summary>
        /// <para>Alternate Name Tables</para>
        /// <para><xdoc>
        ///   <para>The tables that contain alternate names for the features in the primary role tables.</para>
        ///   <para>Tables represented as services are supported data types for use as alternate name tables.</para>
        ///   <para>When a definition query is defined for the alternate name table or there are selected records, only the queried and selected records will be included when the locator is created.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>包含主角色表中功能的备用名称的表。</para>
        ///   <para>表示为服务的表是受支持的数据类型，可用作备用名称表。</para>
        ///   <para>如果为备用名称表定义了定义查询或存在选定记录，则在创建定位器时将仅包含查询记录和所选记录。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Alternate Name Tables")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _alternatename_tables { get; set; } = null;


        /// <summary>
        /// <para>Alternate Data Field Mapping</para>
        /// <para><xdoc>
        ///   <para>Maps alternate name table fields to the alternate data fields supported by the locator role. Fields with an asterisk (*) next to their names are required by the locator role. Map the relevant fields for each table in Alternate Name Tables.</para>
        ///   <para>If the data is normalized and the primary table does not contain city name values but the alternate name table does, the Primary Name Indicator field can be mapped to a field in the alternate name table that contains a value that indicates whether the record is the primary field (for example, true/false or Yes/No). If this field is not mapped, the first record in the alternate name table will be used as the primary value.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将备用名称表字段映射到定位器角色支持的备用数据字段。名称旁边带有星号 （*） 的字段是定位器角色所必需的字段。映射备用名称表中每个表的相关字段。</para>
        ///   <para>如果数据已规范化，并且主表不包含城市名称值，但备用名称表包含城市名称值，则可以将“主名称指示器”字段映射到备用名称表中的字段，该字段包含指示记录是否为主字段的值（例如，true/false 或 Yes/No）。如果未映射此字段，则备用名称表中的第一条记录将用作主值。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Alternate Data Field Mapping")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _alternate_field_mapping { get; set; } = null;


        /// <summary>
        /// <para>Custom Output Fields</para>
        /// <para><xdoc>
        ///   <para>Adds output fields to the geocode result. The values specified for this parameter will define the names of the output fields that will be returned by the geocode result; however, each new field must be mapped to a field in the reference data. This new output field will apply for all roles that were used in the locator. If the locator role has a left and right side, _left and _right will be appended to the end of the field name. The maximum number of fields supported in the locator is 50.</para>
        ///   <para>Do the following to add custom output fields to the locator for use in the geocode result:</para>
        ///   <bulletList>
        ///     <bullet_item>Type the names of the custom output fields. The custom output field names will be added to the field mapping.</bullet_item><para/>
        ///     <bullet_item>Select the field in the reference data that contains the additional values to be included in the geocode output.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将输出字段添加到地理编码结果中。为此参数指定的值将定义地理编码结果将返回的输出字段的名称;但是，每个新字段都必须映射到参考数据中的字段。此新输出字段将应用于定位器中使用的所有角色。如果定位器角色具有左侧和右侧，则_left和_right将追加到字段名称的末尾。定位器中支持的最大字段数为 50。</para>
        ///   <para>执行以下操作以将自定义输出字段添加到定位器以用于地理编码结果：</para>
        ///   <bulletList>
        ///     <bullet_item>键入自定义输出字段的名称。自定义输出字段名称将添加到字段映射中。</bullet_item><para/>
        ///     <bullet_item>在参考数据中选择包含要包含在地理编码输出中的其他值的字段。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Custom Output Fields")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _custom_output_fields { get; set; } = null;


        /// <summary>
        /// <para>Precision Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the precision of the locator.</para>
        ///   <para>Locators created with Global Extra High or Local Extra High precision can be used in ArcGIS Pro 2.6 or later and Enterprise 10.8.1 or later.</para>
        ///   <bulletList>
        ///     <bullet_item>Global Extra High— The precision is approximately 1cm, which is consistent globally.</bullet_item><para/>
        ///     <bullet_item>Global High— The precision is approximately 0.5m, which is consistent globally. This is the default.</bullet_item><para/>
        ///     <bullet_item>Local Extra High— Increased precision is used for local areas.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定定位器的精度。</para>
        ///   <para>使用 Global Extra High 或 Local Extra High 精度创建的定位器可用于 ArcGIS Pro 2.6 或更高版本以及 Enterprise 10.8.1 或更高版本。</para>
        ///   <bulletList>
        ///     <bullet_item>全局超高— 精度约为 1 厘米，全局一致。</bullet_item><para/>
        ///     <bullet_item>全局高 — 精度约为 0.5m，全局一致。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>局部超高 - 用于局部区域的更高精度。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Precision Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _precision_type_value _precision_type { get; set; } = _precision_type_value._GLOBAL_HIGH;

        public enum _precision_type_value
        {
            /// <summary>
            /// <para>Global High</para>
            /// <para>Global High— The precision is approximately 0.5m, which is consistent globally. This is the default.</para>
            /// <para>全局高 — 精度约为 0.5m，全局一致。这是默认设置。</para>
            /// </summary>
            [Description("Global High")]
            [GPEnumValue("GLOBAL_HIGH")]
            _GLOBAL_HIGH,

            /// <summary>
            /// <para>Global Extra High</para>
            /// <para>Global Extra High— The precision is approximately 1cm, which is consistent globally.</para>
            /// <para>全局超高— 精度约为 1 厘米，全局一致。</para>
            /// </summary>
            [Description("Global Extra High")]
            [GPEnumValue("GLOBAL_EXTRA_HIGH")]
            _GLOBAL_EXTRA_HIGH,

            /// <summary>
            /// <para>Local Extra High</para>
            /// <para>Local Extra High— Increased precision is used for local areas.</para>
            /// <para>局部超高 - 用于局部区域的更高精度。</para>
            /// </summary>
            [Description("Local Extra High")]
            [GPEnumValue("LOCAL_EXTRA_HIGH")]
            _LOCAL_EXTRA_HIGH,

        }

        public CreateLocator SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}